import axios from "axios";
import { getToken, removeToken } from "./cookie";
//不同的功能，通过axios请求的是不同的接口地址
//127.0.0.1:19090
axios.defaults.headers["Content-Type"]="application/json;charset=utf-8";

const service = axios.create({
    baseURL:"/dev-api", 
    timeout:5000,      //超时管理，5s之内收到响应，此时就是正常，假如5s之内还没有返回
})
//响应拦截器,"Authorization专门用来存储身份认证的字段
service.interceptors.request.use(
(config)=>{
    if(getToken()){
        config.headers["Authorization"]= "Bearer " +getToken();
    }
    return config;
},
(error)=>{
    console.log(error)
    Promise.reject(error)
});
//响应拦截器
service.interceptors.response.use(
    (res) => {
   // 未设置状态码则默认成功状态,res:响应数据
   const code = res.data.code;
   const msg = res.data.msg;
   if(code==3001){
    ElMessage.error(msg);
    removeToken()
    router.push('/oj/login')
    return Promise.reject(new Error(msg));
   } else if (code !== 1000) {
   ElMessage.error(msg);
//失败时候,打印登录错误的相关信息
   return Promise.reject(new Error(msg));
    } else {
    //成功时候,把返回数据刨开一层，这样返回就好操作了    //优化点1
   return Promise.resolve(res.data);
    }
    },               //成功的回调，和失败的回调 （成功:响应的结果成功发送给和发送回就叫成功了，流程正常就是成功)
    (error) => {
   return Promise.reject(error);
    }
   );

export default service
//http://localhost:5173/dev-api/sysUser/login   
//同源策略
//浏览器处于安全考虑，只允许同一源(协议+域名+端口都相同)的请求访问资源，否则会出现跨域问题,考虑要不要一致的端口，
// 发现不行因为一个端口只能被一个占用，配置一个代理服务器
//http://xx   ->https   ...     协议不同
//local:9090   local:8080 端口不同
//www.xx.com    ->www.yy.com->域名不同
//前端(浏览器) ->转发到后端(代理服务器) 前端去请求代理服务器请求后端